From 352b566179d9e769327d6427a500a0ba007f0202 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Thu, 28 Sep 2017 21:06:35 -0400 Subject: [PATCH] Recorder: Show details about linear gradient nodes --- gtk/inspector/recorder.c | 72 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) diff --git a/gtk/inspector/recorder.c b/gtk/inspector/recorder.c index 73dc681243..5467661ddb 100644 --- a/gtk/inspector/recorder.c +++ b/gtk/inspector/recorder.c @@ -206,6 +206,37 @@ get_color_surface (const GdkRGBA *color) return surface; } +static cairo_surface_t * +get_linear_gradient_surface (gsize n_stops, GskColorStop *stops) +{ + cairo_surface_t *surface; + cairo_t *cr; + cairo_pattern_t *pattern; + int i; + + surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, 90, 30); + cr = cairo_create (surface); + + pattern = cairo_pattern_create_linear (0, 0, 90, 0); + for (i = 0; i < n_stops; i++) + { + cairo_pattern_add_color_stop_rgba (pattern, + stops[i].offset, + stops[i].color.red, + stops[i].color.green, + stops[i].color.blue, + stops[i].color.alpha); + } + + cairo_set_source (cr, pattern); + cairo_pattern_destroy (pattern); + cairo_rectangle (cr, 0, 0, 90, 30); + cairo_fill (cr); + cairo_destroy (cr); + + return surface; +} + static void populate_render_node_properties (GtkListStore *store, GskRenderNode *node) @@ -291,6 +322,47 @@ populate_render_node_properties (GtkListStore *store, } break; + case GSK_LINEAR_GRADIENT_NODE: + case GSK_REPEATING_LINEAR_GRADIENT_NODE: + { + const graphene_point_t *start = gsk_linear_gradient_node_peek_start (node); + const graphene_point_t *end = gsk_linear_gradient_node_peek_end (node); + const gsize n_stops = gsk_linear_gradient_node_get_n_color_stops (node); + const GskColorStop *stops = gsk_linear_gradient_node_peek_color_stops (node); + char *text; + int i; + GString *s; + cairo_surface_t *surface; + + text = g_strdup_printf ("%.2f %.2f ⟶ %.2f %.2f", start->x, start->y, end->x, end->y); + gtk_list_store_insert_with_values (store, NULL, -1, + 0, "Direction", + 1, text, + 2, FALSE, + 3, NULL, + -1); + g_free (text); + + s = g_string_new (""); + for (i = 0; i < n_stops; i++) + { + char *tmp = gdk_rgba_to_string (&stops[i].color); + g_string_append_printf (s, "%.2f, %s\n", stops[i].offset, tmp); + g_free (tmp); + } + + surface = get_linear_gradient_surface (n_stops, stops); + gtk_list_store_insert_with_values (store, NULL, -1, + 0, "Color Stops", + 1, s->str, + 2, TRUE, + 3, surface, + -1); + g_string_free (s, TRUE); + cairo_surface_destroy (surface); + } + break; + case GSK_TEXT_NODE: { PangoFont *font = gsk_text_node_get_font (node); -- 2.30.2